home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / pptp_detect.nasl < prev    next >
Text File  |  2005-03-31  |  4KB  |  136 lines

  1. # This script was written by Noam Rathaus <noamr@securiteam.com>
  2.  
  3. if (description)
  4. {
  5.  script_id(10622);
  6.  script_version ("$Revision: 1.12 $");
  7.  script_name(english:"PPTP detection and versioning");
  8.  desc["english"] = "
  9. The remote host seems to be running a PPTP (VPN) service, this service
  10. allows remote users to connect to the internal network and play a trusted
  11. rule in it. This service should be protect with encrypted username
  12. & password combinations, and should be accessible only to trusted
  13. individuals. By default the service leaks out such information as Server
  14. version (PPTP version), Hostname and Vendor string this could help an
  15. attacker better prepare her next attack.
  16.  
  17. Also note that PPTP is not configured as being cryptographically
  18. secure, and you should use another VPN method if you can
  19.  
  20.  
  21. See also : http://www.counterpane.com/pptp-faq.html
  22.  
  23. Solution: Restrict access to this port from untrusted networks. Make sure
  24. only encrypt channels are allowed through the PPTP (VPN) connection.
  25.  
  26. Risk factor : Low";
  27.  
  28.  script_description(english:desc["english"]);
  29.  script_summary(english:"Determine if a remote host is running a PPTP (VPN) service");
  30.  script_category(ACT_GATHER_INFO);
  31.  script_family(english:"Service detection");
  32.  script_copyright(english:"This script is Copyright (C) 2001 SecuriTeam");
  33.  script_require_ports(1723);
  34.  exit(0);
  35. }
  36.  
  37.  
  38. include("misc_func.inc");
  39.  
  40. buffer = 
  41. raw_string(0x00, 0x9C) +
  42. # Length
  43.  
  44. raw_string(0x00, 0x01) +
  45. # Control packet
  46.  
  47. raw_string(0x1A, 0x2B, 0x3C, 0x4D) +
  48. # Magic Cookie
  49.  
  50. raw_string(0x00, 0x01) +
  51. # Control Message = Start Session Request
  52.  
  53. raw_string(0x00, 0x00) +
  54. # Reserved word 1
  55.  
  56. raw_string(0x01, 0x00) +
  57. # Protocol version = 256
  58.  
  59. raw_string(0x00) +
  60. # Reserved byte 1
  61.  
  62. raw_string(0x00) +
  63. # Reserved byte 2
  64.  
  65. raw_string(0x00, 0x00, 0x00, 0x01) +
  66. # Framing Capability Summary (Can do async PPP)
  67.  
  68. raw_string(0x00, 0x00, 0x00, 0x01) +    
  69. # Bearer Capability Summary (Can do analog calls)
  70.  
  71. raw_string(0x00, 0x00) +
  72. # Max Channels
  73.  
  74. raw_string(0x08, 0x70) +
  75. # Frimware Revision = 2160
  76.  
  77. raw_string(
  78. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  79. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  80. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  81. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  82. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  83. 0x00, 0x00, 0x00, 0x00) +
  84. # Hostname
  85.  
  86. raw_string(
  87. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  88. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  89. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  90. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  91. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  92. 0x00, 0x00, 0x00, 0x00);
  93. # Vendor string
  94.  
  95. port = 1723;
  96. if (get_port_state(port))
  97. {
  98.  soc = open_sock_tcp(1723);
  99.  if (soc)
  100.  {
  101.   send(socket:soc, data:buffer);
  102.   rec_buffer = recv(socket:soc, length:156);
  103.   if (strlen(rec_buffer) < 156 ) exit(0);
  104.  
  105.   # Verify PPTP response
  106.  
  107.   # Verify PPTP packet
  108.   if ((ord(rec_buffer[2]) == 0) && (ord(rec_buffer[3]) == 1)) # Control Packet
  109.   {
  110.    if ((ord(rec_buffer[8]) == 0) && (ord(rec_buffer[9]) == 2)) # Replay packet
  111.    {
  112.  
  113.     firmware_version = 0;
  114.     firmware_version = ord(rec_buffer[26])*256 + ord(rec_buffer[27]);
  115.  
  116.     host_name = "";
  117.     for (i=28; (i<28+64) && (ord(rec_buffer[i]) > 0); i=i+1){
  118.     host_name = host_name + rec_buffer[i];}
  119.  
  120.     vendor_string = "";
  121.     for (i=92; (i<92+64) && (ord(rec_buffer[i]) > 0); i=i+1){
  122.     vendor_string = vendor_string + rec_buffer[i];}
  123.  
  124.     buffer = string("A PPTP server is running on this port\n", 
  125.                  "Firmware Revision:", firmware_version, 
  126.              "\nHost name:", host_name, 
  127.              "\nVendor string:", 
  128.              vendor_string);
  129.     security_note(port:port, data: buffer);
  130.     register_service(port:port, proto:"pptp");
  131.    }
  132.   }
  133.  }
  134. }
  135.  
  136.